--[[模块延迟加载模型
	事先声明对全局变量的占用，等需要的时候再进行实际的加载
]]
local M = {
    modMap = {}
}

local function getModMap(key)
    return M.modMap[key]
end

function setModMap(key, value)
    M.modMap[key] = value
end

local function setGlobalMetatable()
    local meta = {}

    meta.__index = function(t, key)
        local modPath = getModMap(key)
        if modPath then
            _G[key] = require(modPath)
            return _G[key]
        end
        return nil
    end

    setmetatable(_G, meta)
end

local function init()
    setGlobalMetatable()
end


function M.releaseDelcareMod()
    for key, modPath in pairs(M.modMap) do
        _G[key] = nil
        _G[modPath] = nil
    end

    M.modMap = {}
end

--[[ 全局模块的预声明
	globalName：全局名称
	modPath：模块路径
]]
function M.preDeclareMod(globalName, modPath)
    setModMap(globalName, modPath)
end


init()

return M